<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>

    // forEach()  数组遍历
    // 作用: 遍历数组,每次循环时执行传入的函数(回调函数),
    // 回调函数 => 有三个形式参数(参数可以自己改),  item:循环当前元素, index:循环的当前下标, array: 原数组(被遍历的数组 -> 很少用

    // var list = [1, 4, 7, 8, 5, 2, 3, 6, 9];
    // var sum = 0;
    // // 遍历数组
    // list.forEach(function(item){ // 形参(item:循环当前元素, index:循环的当前下标, array: 原数组(被遍历的数组 -> 很少用))
    //     console.log(item); //  每次循环时执行的代码
    //     sum += item;
    // });
    // console.log(sum);


</script>
<script>

    // 未封装
    // function fn(item,index,array){
    //     console.log(item,index,array);
    // }
    // var list = [1, 4, 7, 8, 5, 2, 3, 6, 9];
    // for(var i in list){
    //     i = Number(i); // 循环的当前下标
    //     fn(list[i],i,list); // 实际参数 (循环的当前元素, 下标 原数组)
    // }

    // 回调函数(callback)  => 把函数当成参数(实际参数)传入到另一个函数中,让它在另一个函数中执行 (简单的来说:传入的函数并没有立即执行,而是需要在接收的函数内调用才会执行)
     // 回调的作用: 可以让用户自行决定在另一个函数中执行什么内容(提前决定好要执行的内容,让它在另一个函数中执行  => 锦囊妙计)

    //  本质上:还是属于函数嵌套  => 只不过函数从参数传入

    // 封装
    /* function myForEach(list,fn) {
        console.log(list,fn);
        // function fn(item, index, array) { // 函数定死
        //     console.log(item, index, array);
        // }
        // var list = [1, 4, 7, 8, 5, 2, 3, 6, 9];  //数组定死
        for (var i in list) {
            i = Number(i); // 循环的当前下标
            fn(list[i], i, list); // 实际参数 (循环的当前元素, 下标 原数组)
        }
    }

    myForEach([1,4,7],function(item,index){
        console.log(item,index);
    });
    myForEach([2,5,8],function(a,b){
        console.log(a,b);
    }); */


    function myMap(list,fn) {
        console.log(list,fn);
        // function fn(item, index, array) { // 函数定死
        //     console.log(item, index, array);
        // }
        // var list = [1, 4, 7, 8, 5, 2, 3, 6, 9];  //数组定死

        var arr = [];
        for (var i in list) {
            i = Number(i); // 循环的当前下标
            var result = fn(list[i], i, list); // 实际参数 (循环的当前元素, 下标 原数组)
            arr.push(result);
        }
        return arr;
    }

    var result = myMap([1,4,7],function(item,index){
        console.log(item,index);
        return item * 10;
    });
    console.log(result);

    // 面向对象 => 原型对象
    // Array.prototype.myForEach = function(callback){

    // } 



</script>

</html>